Multi-thread processing and multi-processor systems are becoming more and more common in modern computing systems. For example, in such a system, multiple threads from multiple processors run in parallel. Very often, these parallel threads share common resources, e.g., a shared register, shared memory, shared cache, and/or the like. In an example, in addition to the multiple threads, one or more hardware modules also share the common resources.
In an example, for the integrity of data stored in these shared resources, at any time, only one thread or only one hardware module can access a shared resource, i.e., the access to the shared resource has to be exclusive. Thus, it is necessary to arbitrate access to a shared resource among multiple threads and hardware modules, to guarantee exclusive access to the shared resource and to maintain integrity of data stored in the shared resource.